利用最佳直方图熵法(KSW熵法)及传统遗传算法实现灰度图像二阈值分割
matlab代码如下:
1、main.m(主函数):
%%%利用最佳直方图熵法(KSW熵法)及传统遗传算法实现灰度图像二阈值分割
%%%主程序
%% 初始部分,读取图像及计算相关信息
clear;
close all;
clc;
I=imread('D:\MATLAB\work\2.21.jpg');
figure
figure(1),imshow(I);
I=rgb2gray(I);
% I=imread('Lenna.bmp');
hist=imhist(I); %显示图像数据柱状图
total=0;
for i=0:255
total=total+hist(i+1);
end
hist1=hist/total; %求每点的归一化//求像素为i的概率Pi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 程序主干部分
%种群随机初始化,种群数取20,染色体二进制编码取16位
t0=clock;
population=20;
X00=round(rand(1,population)*255);
X01=round(rand(1,population)*255);
for i=1:population
X0(i,:)=[X00(i) X01(i)];
end
for i=1:population
if X0(i,1)>X0(i,2)
temp=X0(i,1);
X0(i,2)=temp;
X0(i,1)=temp;
else
end
adapt_value0(i)=ksw_2(X0(i,1),X0(i,2),0,255,hist1);
end
adapt_average0=mean(adapt_value0);
X1=X0;
adapt_value1=adapt_value0;
adapt_average1=adapt_average0;
%循环搜索,搜索代数取100
generation=100;
for k=1:generation
s1=select_2d(X1,adapt_value1);
s_code10=dec2bin(s1(:,1),8);
s_code11=dec2bin(s1(:,2),8);
[c10,c11]=cross_2d(s_code10,s_code11);
[v10,v11]=mutation_2d(c10,c11);
X20=(bin2dec(v10))';
X21=(bin2dec(v11))';
for i=1:population
X2(